package financeiro.web;

import financeiro.usuario.Usuario;
import financeiro.usuario.UsuarioRN;
import java.util.List;
import java.util.Set;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

@ManagedBean(name = "usuarioBean")
@RequestScoped
public class UsuarioBean {

    private Usuario usuario = new Usuario();
    private String confirmarSenha;
    private List<Usuario> lista;
    private String destinoSalvar;

    public String novo() {
        this.setDestinoSalvar("usuarioSucesso");
        this.usuario = new Usuario();
        this.usuario.setAtivo(true);
        return "usuario";
    }

    public String editar() {
        this.confirmarSenha = this.usuario.getSenha();
        return "/publico/usuario";
    }

    public String salvar() {
        FacesContext context = FacesContext.getCurrentInstance();

        String senha = this.usuario.getSenha();
        if (!senha.equals(this.confirmarSenha)) {
            FacesMessage facesMessage = new FacesMessage("A senha não foi confirmada corretamente");
            context.addMessage(null, facesMessage);
            return null;
        }

        UsuarioRN usuarioRN = new UsuarioRN();
        usuarioRN.salvar(this.usuario);

        return this.getDestinoSalvar();
    }

    public String excluir() {
        UsuarioRN usuarioRN = new UsuarioRN();
        usuarioRN.excluir(this.usuario);
        this.lista = null;
        return null;
    }

    public String ativar() {
        if (this.usuario.isAtivo()) {
            this.usuario.setAtivo(false);
        } else {
            this.usuario.setAtivo(true);
        }

        UsuarioRN usuarioRN = new UsuarioRN();
        usuarioRN.salvar(this.usuario);
        return null;
    }

    public List<Usuario> getLista() {
        if (this.lista == null) {
            UsuarioRN usuarioRN = new UsuarioRN();
            this.lista = usuarioRN.listar();
        }
        return this.lista;
    }

    public String atribuiPermissao(Usuario usuario, String permissao) {
        this.usuario = usuario;
        Set<String> permissoes = this.usuario.getPermissao();
        if (permissoes.contains(permissao)) {
            permissoes.remove(permissao);
        } else {
            permissoes.add(permissao);
        }
        return null;
    }

    /**
     * @return the usuario
     */
    public Usuario getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    /**
     * @return the confirmarSenha
     */
    public String getConfirmarSenha() {
        return confirmarSenha;
    }

    /**
     * @param confirmarSenha the confirmarSenha to set
     */
    public void setConfirmarSenha(String confirmarSenha) {
        this.confirmarSenha = confirmarSenha;
    }

    /**
     * @return the destinoSalvar
     */
    public String getDestinoSalvar() {
        return destinoSalvar;
    }

    /**
     * @param destinoSalvar the destinoSalvar to set
     */
    public void setDestinoSalvar(String destinoSalvar) {
        this.destinoSalvar = destinoSalvar;
    }
}
